package com.ldzy.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        //拦截请求，检查是否还在会话期内，提取请求携带的sessionId,用这个id去内存中寻找这个session，
        // 如果有，则认为在会话期内，如果没有则认为不在会话期内
        //可以使用手工方法来实现上面的提取查询，也可以使用框架自带的方法
        HttpSession session = request.getSession();
        //上面的代码，会自动提取请求头部携带的sessionId，使用这个id去内存寻找这个session，返回这个session变量
        //上面代码：使用这个id去内存寻找这个session，找不到，则new新的session变量
        //上面代码：会自动提取请求头部携带的sessionId，如果没有提取到id，则new新的session对象变量
        //问题：怎么判断上面返回session是新的还是旧的，检查session是否含有某个特定的键
        Object key = session.getAttribute("user");
        if(key==null){//是新的,拦截，跳转到登录页面，返回假
            request.getRequestDispatcher("/toLoginPage").forward(request,response);
            return false;
        }else {//是旧的
            return true;
        }

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
